﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Printing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System.IO;
using System.Media;
using System.Data.Linq;
using Microsoft.Win32;
using Supervisor;
using System.Configuration;
using System.Data.SqlClient;

namespace CRTest //Supervisor 
{
    public partial class FormSupervisor : Form
    {
        #region Переменные
        
        SupervisorDB DB;

        long lРаботник_K;
        string sРаботник;
        long lЛистЗаявки_K;

        int iПредыдущееКоличествоЗаявокДляСборки = -1;
        SoundPlayer ЕстьЗаявка;

        // Для строки подключения
        string strDataSource;
        string strInitialCatalog;
        string strUserID;
        string strPassword;

        #endregion

        #region Конструктор
        public FormSupervisor()
        {
            InitializeComponent();

            ЕстьЗаявка = new SoundPlayer("C:\\Program Files\\Supervisor.wav");
      
        }
        #endregion


        private void FormSupervisor_Load(object sender, EventArgs e)
        {
            try
            {
                Bounds = Screen.PrimaryScreen.WorkingArea;
                //DB = new SupervisorDB("Data Source=F2; Initial Catalog=Farmin2008; User ID=Admin; Password=zx");
                DB = new SupervisorDB(GetConnectionString());

                ОтобразитьАктивныеЗадания();
                СтрокаВводаTextBox.Focus();
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message, "Supervisor_FormSupervisor_Load", MessageBoxButtons.OK, MessageBoxIcon.Error); 
            }
           
        }

        /// <summary>
        /// Получить ConnectionStrings из app.config
        /// </summary>
        /// <returns></returns>
        private string GetConnectionString()
        {
            try
            {
                return ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message, "Supervisor_GetConnectionString", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return null;
            }
           
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                ShowReportBuilApplication(Convert.ToInt32(textBox1.Text));
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message, "Supervisor_button1_Click", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }



        
        /// <summary>
        /// Показать (отправить на принтер) отчёт по зяавкам
        /// </summary>
        /// <param name="Id_K">Id заявки</param>
        //public void ShowReportBuilApplication(int Id_K)
        //{
        //    // добавляем Id заявки в таблицу (одновременно удаляя оттуда предыдущие значения) 
        //    DB._Supervisor_SetParamApp_KValue(Id_K);

        //    ReportDocument reportDocument = new ReportDocument();
        //    ParameterFields paramFields = new ParameterFields();
        //    // --- тестовый вариант
        //    reportDocument.Load(GetFilePathForApplicationReport("Заявка.rpt"));
        //    crystalReportViewer1.ReportSource = reportDocument;

        //    // --- тестовый вариант
        //    ParameterField paramField = new ParameterField();
        //    ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();
        //    paramField.Name = "@Application_K";
        //    paramDiscreteValue.Value = Id_K; //TextBox1.Text.ToString();
        //    paramField.CurrentValues.Add(paramDiscreteValue);
        //    paramFields.Add(paramField);

        //    crystalReportViewer1.ParameterFieldInfo = paramFields;
        //    // здесь
        //    // тестовый вариант
        //    SetDBLogonForReport(GetConnectionParametrForReport(), reportDocument);

        //    //---
        //    reportDocument.Load(GetFilePathForApplicationReport("Заявка.rpt"));
        //    crystalReportViewer1.ReportSource = reportDocument;

        //    // ориганальный вариант
        //    /*
        //    ConnectionInfo cInf = GetConnectionParametrForReport();
        //    reportDocument.SetDatabaseLogon(cInf.UserID, cInf.Password, cInf.ServerName, cInf.DatabaseName);
        //    */
        //    crystalReportViewer1.Refresh();
        //    crystalReportViewer1.PrintReport();
        //}

        public void ShowReportBuilApplication(int Id_K)
        {
            try
            {
                // добавляем Id заявки в таблицу (одновременно удаляя оттуда предыдущие значения) 
                DB._Supervisor_SetParamApp_KValue(Id_K);
                ShowReport(GetFilePathForApplicationReport("Заявка.rpt"), "_Supervisor_GetApplicationList");
                //crystalReportViewer1.PrintReport(); // непосредственно вывод на печать. Скорее всего ошибка здесь
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message, "Supervisor_ShowReportBuilApplication", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        /*
        protected void ShowReportTemp(String fileName, String strProcedureName)
        {
            var cryRpt = new ReportDocument();
            cryRpt.Load("~/CrystalReports/DateToDateReport.rpt");

            new TableLogOnInfos();
            TableLogOnInfo crtableLogoninfo;
            var crConnectionInfo = new ConnectionInfo();

            var crParameterDiscreteValue = new ParameterDiscreteValue { Value = dtpFromDate.Value };

            ParameterFieldDefinitions crParameterFieldDefinitions = cryRpt.DataDefinition.ParameterFields;
            ParameterFieldDefinition crParameterFieldDefinition = crParameterFieldDefinitions["fromDate"];
            ParameterValues crParameterValues = crParameterFieldDefinition.CurrentValues;

            crParameterValues.Clear();
            crParameterValues.Add(crParameterDiscreteValue);
            crParameterFieldDefinition.ApplyCurrentValues(crParameterValues);

            crParameterDiscreteValue.Value = dtpToDate.Value;
            crParameterFieldDefinitions = cryRpt.DataDefinition.ParameterFields;
            crParameterFieldDefinition = crParameterFieldDefinitions["toDate"];
            crParameterValues = crParameterFieldDefinition.CurrentValues;

            crParameterValues.Add(crParameterDiscreteValue);
            crParameterFieldDefinition.ApplyCurrentValues(crParameterValues);

            crConnectionInfo.ServerName = "ServerName";
            crConnectionInfo.DatabaseName = "Database";
            crConnectionInfo.UserID = "Username";
            crConnectionInfo.Password = "Password";

            var crTables = cryRpt.Database.Tables;
            foreach (Table crTable in crTables)
            {
                crtableLogoninfo = crTable.LogOnInfo;
                crtableLogoninfo.ConnectionInfo = crConnectionInfo;
                crTable.ApplyLogOnInfo(crtableLogoninfo);
            }

            crystalReportViewer1.ReportSource = cryRpt;
            crystalReportViewer1.Refresh();
        }
        */

        

        protected void ShowReport(String fileName, String strProcedureName)
        {
            try
            {
                ReportDocument doc;
                TableLogOnInfo crTableLogOnInfo = new TableLogOnInfo();
                ConnectionInfo crConnectionInfo = new ConnectionInfo();
                CrystalDecisions.CrystalReports.Engine.Database crDatabase;
                CrystalDecisions.CrystalReports.Engine.Tables crTables;
                doc = new ReportDocument();
                doc.Load(fileName);

                ConnectionInfo cInf = GetConnectionParametrForReport();

                crConnectionInfo.ServerName = cInf.ServerName;
                crConnectionInfo.DatabaseName = cInf.DatabaseName;
                crConnectionInfo.UserID = cInf.UserID;
                crConnectionInfo.Password = cInf.Password;
                crConnectionInfo.Type = ConnectionInfoType.SQL;
                crConnectionInfo.IntegratedSecurity = false;
                crDatabase = doc.Database;
                crTables = crDatabase.Tables;
                SqlConnection conn =
                    new System.Data.SqlClient.SqlConnection(
                        ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
                SqlCommand cmd = new SqlCommand("dbo." + strProcedureName, conn);
                cmd.CommandType = CommandType.StoredProcedure;
                SqlDataAdapter adpt = new SqlDataAdapter(cmd);
                DataSet dataSet = new DataSet();
                adpt.Fill(dataSet, "Customers");
                foreach (CrystalDecisions.CrystalReports.Engine.Table crTable in crTables)
                {
                    crTableLogOnInfo = crTable.LogOnInfo;
                    crTableLogOnInfo.ConnectionInfo = crConnectionInfo;
                    crTable.ApplyLogOnInfo(crTableLogOnInfo);
                }
                doc.SetDataSource(dataSet.Tables[0]);
                crystalReportViewer1.ReportSource = doc;


                //crystalReportViewer1.PrintReport(); // непосредственно вывод на печать. Скорее всего ошибка здесь

                // выполняем экспорт в pdf файл
                // --- 17.04.2013 ---
                string targetFileName = GetFilePathForPdfReport(); //System.Windows.Forms.Application.StartupPath + "\\" + strPdfFile; //GetFilePathForApplicationReport(strPdfFile);
                if (!System.String.IsNullOrEmpty(targetFileName))
                {
                    doc.ExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
                    doc.ExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;

                    DiskFileDestinationOptions diskOpts = new DiskFileDestinationOptions();
                    diskOpts.DiskFileName = targetFileName;
                    doc.ExportOptions.DestinationOptions = diskOpts;

                    // Export report
                    doc.Export();

                    // полностью рабочий метод, не используется из-за того, что при экспорте в pdf, уменьшается шрифт со штрихкодом до мелкого. Это ищвесный баг кристал репорта
                    // лечится изправлением реестра, но на сервере терминалов нет такой ветки реестра
                    // PrintOrShowBySumatraPDF(targetFileName, false);

                    //------------
                    PrinterSettings settings = new PrinterSettings();
                    if (!System.String.IsNullOrEmpty(settings.PrinterName))
                    {
                        doc.PrintOptions.PrinterName = settings.PrinterName;
                        doc.PrintToPrinter(1, false, 0, 0); //copies, collated, startpage, endpage
                    }
                    else
                    {
                        PrintOrShowBySumatraPDF(targetFileName, false);
                    }


                    //------------


                    #region Находим путь к Adobe Acrobat

                    //var adobe = Registry.LocalMachine.OpenSubKey("Software").OpenSubKey("Microsoft").OpenSubKey("Windows").OpenSubKey("CurrentVersion").OpenSubKey("App Paths").OpenSubKey("AcroRd32.exe");
                    //string path="";
                    //if (adobe != null)
                    //{
                    //    // Находим полный путь к акробату
                    //    path = adobe.GetValue("").ToString();
                    //}

                    #endregion

                    #region Вариант №1

                    ////DoSomeVeryDirtyHacksToMakeItWork();
                    //ProcessStartInfo startInfo = new ProcessStartInfo();
                    //startInfo.FileName = path; //PdfFilePrinter.adobeReaderPath;
                    ////string args = String.Format("/t \"{0}\" \"{1}\"", targetFileName, this.printerName);
                    //string args = String.Format("/t \"{0}\"", targetFileName); // /t
                    ////Debug.WriteLine(args);
                    //startInfo.Arguments = args;
                    //startInfo.CreateNoWindow = true;
                    //startInfo.ErrorDialog = false;
                    //startInfo.UseShellExecute = false;
                    ////if (this.workingDirectory != null && this.workingDirectory.Length != 0)
                    ////    startInfo.WorkingDirectory = this.workingDirectory;

                    //Process process = Process.Start(startInfo);
                    ////if (!process.WaitForExit(4000)) //this line tell that the program have to wiat forever until manual adobe close
                    ////{
                    ////    // Kill Adobe Reader/Acrobat
                    ////    //process.Kill();
                    ////    process.WaitForInputIdle();
                    ////    process.CloseMainWindow();

                    ////}

                    #endregion

                    #region Рабочий фрагмент, испольльзует для печати Acrobat

                    //---*** Полностью рабочий фрагмент BEGIN ***---
                    //Process proc = new Process();

                    //// Получаем ветку реестра акробата
                    //var adobe = Registry.LocalMachine.OpenSubKey("Software").OpenSubKey("Microsoft").OpenSubKey("Windows").OpenSubKey("CurrentVersion").OpenSubKey("App Paths").OpenSubKey("AcroRd32.exe");
                    //if (adobe != null)
                    //{
                    //    // Находим полный путь к акробату
                    //    var path = adobe.GetValue(""); 
                    //    if (!System.String.IsNullOrEmpty(path.ToString()))
                    //    {
                    //        proc.StartInfo.FileName = path.ToString();
                    //        proc.StartInfo.Arguments = " /p " + targetFileName; //p
                    //        proc.StartInfo.UseShellExecute = false;
                    //        proc.StartInfo.CreateNoWindow = true;
                    //        proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

                    //        proc.Start();
                    //        proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;


                    //        //for (int i = 0; i < 5; i++)
                    //        //{
                    //        //    if (!proc.HasExited)
                    //        //    {
                    //        //        proc.Refresh();
                    //        //        Thread.Sleep(1000);
                    //        //    }
                    //        //    else
                    //        //        break;
                    //        //}
                    //        //if (!proc.HasExited)
                    //        //{
                    //        //    proc.CloseMainWindow();
                    //        //}
                    //    }
                    //    else
                    //    {
                    //        crystalReportViewer1.PrintReport();
                    //    }
                    //}
                    //else
                    //{
                    //    crystalReportViewer1.PrintReport();
                    //}

                    //---*** Полностью рабочий фрагмент END ***---

                    #endregion

                    #region Вариант №2

                    /*
                    // Получаем ветку реестра акробата
                    var adobe = Registry.LocalMachine.OpenSubKey("Software").OpenSubKey("Microsoft").OpenSubKey("Windows").OpenSubKey("CurrentVersion").OpenSubKey("App Paths").OpenSubKey("AcroRd32.exe");
                    if (adobe != null)
                    {
                        // Находим полный путь к акробату
                        //var path = "\""+ adobe.GetValue("") +"\"";
                        //string path ="@"+adobe.GetValue("").ToString();
                        //string path ="\"C:\\Program Files (x86)\\Adobe\\Reader 10.0\\Reader\\AcroRd32.exe\"";
                        string path = "AcroRd32.exe";
                        
                        if (File.Exists(path))
                        {
                            var a = 1;
                        }

                        targetFileName = "@" + targetFileName;

                        //var path = "@" + adobe.GetValue("") + "\"";
                        if (!System.String.IsNullOrEmpty(path.ToString()))
                        {
                            targetFileName = Convert.ToString(path) + " " + targetFileName; //+ " /p /h " + targetFileName;
                            //targetFileName = "AcroRd32.exe /P " + targetFileName;
                            System.Diagnostics.Process.Start(targetFileName);
                        }
                        else
                        {
                            crystalReportViewer1.PrintReport();
                        }
                    }
                    else
                    {
                        crystalReportViewer1.PrintReport();
                    }
                    */

                    #endregion
                }
                else
                {
                    // если строка к pdf файлу пернулась в виде "", пробуем выполнить печать из компонента
                    crystalReportViewer1.PrintReport(); // непосредственно вывод на печать. Скорее всего ошибка здесь
                }
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message, "Supervisor_ShowReport", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        /// <summary>
        /// Печатаем(диалог печати) с помощью SumatraPDF
        /// </summary>
        /// <param name="strTargetFileName"></param>
        private void PrintOrShowBySumatraPDF(string strTargetFileName, bool bFlKartaHolod)
        {
            try
            {
                if (bFlKartaHolod)
                {
                    DialogResult dialogResult= MessageBox.Show("Распечатать карту холодовой цепи ?", "Карта холодовой цепи", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
                    if (dialogResult == DialogResult.No)
                    {
                        return;
                    }
                }
                Process p = new Process(); 
                // Находим путь к pdf просмотрщику SumatraPDF.exe. Он должен находиться в одним каталоге с exe файлом.
                // Adobe Acrobat для этой цели НЕ подходит, т.к. он не закрывает окно программы после печати документа.
                // А SumatraPDF, позволяет только показать диалог печати и закрыть окно программы, когда печать произведена и диалог печати закрыт 
                string sPathExe = Path.Combine(System.Windows.Forms.Application.StartupPath, "SumatraPDF.exe");

                if (File.Exists(sPathExe) )
                {
                    p.StartInfo.FileName = "\"" + sPathExe + "\"";
                    //p.StartInfo.Arguments = " -print-dialog -exit-on-print " + "\"" + strTargetFileName + "\"";
                    p.StartInfo.Arguments = " -print-to-default -exit-on-print " + strTargetFileName;
                    
                    p.Start();
                }
                else
                {
                    if (bFlKartaHolod)
                    {
                        crystalReportViewerCold.PrintReport();
                    }
                    else
                    {
                        //PrinterSettings settings = new PrinterSettings();
                        //Console.WriteLine(settings.PrinterName);

                        crystalReportViewer1.PrintReport(); // непосредственно вывод на печать. Скорее всего ошибка здесь
                    }
                   
                }
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message, "Supervisor_PrintShowbySumatraPDF", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        
        //public void ShowReportBuilApplication(int Id_K)
        //{
        //    // добавляем Id заявки в таблицу (одновременно удаляя оттуда предыдущие значения) 
        //    DB._Supervisor_SetParamApp_KValue(Id_K);

        //    ReportDocument reportDocument = new ReportDocument();
        //    ParameterFields paramFields = new ParameterFields();
        //    // --- тестовый вариант
        //    reportDocument.Load(GetFilePathForApplicationReport("Заявка.rpt"));
        //    crystalReportViewer1.ReportSource = reportDocument;

        //    // --- тестовый вариант
        //    ParameterField paramField = new ParameterField();
        //    ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();
        //    paramField.Name = "@Application_K";
        //    paramDiscreteValue.Value = Id_K; //TextBox1.Text.ToString();
        //    paramField.CurrentValues.Add(paramDiscreteValue);
        //    paramFields.Add(paramField);

        //    crystalReportViewer1.ParameterFieldInfo = paramFields;
        //    // здесь
        //    // тестовый вариант
        //    SetDBLogonForReport(GetConnectionParametrForReport(), reportDocument);

        //    //---
        //    reportDocument.Load(GetFilePathForApplicationReport("Заявка.rpt"));
        //    crystalReportViewer1.ReportSource = reportDocument;

        //    // ориганальный вариант
        //    /*
        //    ConnectionInfo cInf = GetConnectionParametrForReport();
        //    reportDocument.SetDatabaseLogon(cInf.UserID, cInf.Password, cInf.ServerName, cInf.DatabaseName);
        //    */
        //    crystalReportViewer1.Refresh();
        //    crystalReportViewer1.PrintReport();
        //}

        //public void ShowReportBuilApplication(int Id_K)
        //{
        //    ReportDocument reportDocument = new ReportDocument();
        //    ParameterFields paramFields = new ParameterFields();
        //    ParameterField paramField = new ParameterField();
        //    ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();
        //    //paramField.Name = "@Application_K";
        //    //paramDiscreteValue.Value = Id_K; //TextBox1.Text.ToString();
        //    //paramField.CurrentValues.Add(paramDiscreteValue);
        //    //paramFields.Add(paramField);
        //    //crystalReportViewer1.ParameterFieldInfo = paramFields;


        //    var con = GetConnectionParametrForReport();
        //    reportDocument.SetDatabaseLogon(con.UserID, con.Password, con.ServerName, con.DatabaseName, false);
        //    paramField.Name = "@Application_K";
        //    paramDiscreteValue.Value = Id_K; //TextBox1.Text.ToString();

        //    paramField.CurrentValues.Add(paramDiscreteValue);
        //    paramFields.Add(paramField);
        //    crystalReportViewer1.ParameterFieldInfo = paramFields;

        //    reportDocument.Load(GetFilePathForApplicationReport("Заявка.rpt"));

            
            
           
                
        //    crystalReportViewer1.ReportSource = reportDocument;
            
        //    // здесь
        //    // тестовый вариант
            
        //    //---
        //    //reportDocument.Load(GetFilePathForApplicationReport("Заявка.rpt"));
        //    //crystalReportViewer1.ReportSource = reportDocument;

        //    // ориганальный вариант
        //    /*
        //    ConnectionInfo cInf = GetConnectionParametrForReport();
        //    reportDocument.SetDatabaseLogon(cInf.UserID, cInf.Password, cInf.ServerName, cInf.DatabaseName);
        //    */

        //    crystalReportViewer1.Refresh();
        //    crystalReportViewer1.PrintReport();
        //}


        
        private void SetDBLogonForReport(ConnectionInfo connectionInfo, ReportDocument reportDocument)
        {
            try
            {
                TableLogOnInfo tableLogOninfo = new TableLogOnInfo();
                Tables tables = reportDocument.Database.Tables;
                foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
                {
                    tableLogOninfo.ConnectionInfo = connectionInfo;
                    table.ApplyLogOnInfo(tableLogOninfo);
                }
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message, "Supervisor_SetDBLogonForReport", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        /// <summary>
        /// Показать (отправить на принтер) отчет холодовой цепи
        /// </summary>
        public void ShowReportCold()
        {
            try
            {
                ReportDocument reportDocument = new ReportDocument();
                
                reportDocument.Load(GetFilePathForApplicationReport("Карта.rpt"));
                crystalReportViewerCold.ReportSource = reportDocument;

                SetDBLogonForReport(GetConnectionParametrForReport(), reportDocument);

                reportDocument.Load(GetFilePathForApplicationReport("Карта.rpt"));
                crystalReportViewerCold.ReportSource = reportDocument;

                crystalReportViewerCold.PrintReport(); // непосредственно вывод на печать. Скорее всего ошибка здесь

                // выполняем экспорт в pdf файл
                // --- 17.04.2013 ---
                string targetFileName = GetFilePathForPdfReport(); //System.Windows.Forms.Application.StartupPath + "\\" + strPdfFile; //GetFilePathForApplicationReport(strPdfFile);
                if (!System.String.IsNullOrEmpty(targetFileName))
                {
                    reportDocument.ExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
                    reportDocument.ExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;

                    DiskFileDestinationOptions diskOpts = new DiskFileDestinationOptions();
                    diskOpts.DiskFileName = targetFileName;
                    reportDocument.ExportOptions.DestinationOptions = diskOpts;

                    // Export report
                    reportDocument.Export();

                    // Открываем pdf файл
                    //System.Diagnostics.Process.Start(targetFileName);

                    PrintOrShowBySumatraPDF(targetFileName, true); // печтатем отчет

                    #region Вариант 1

                    /*
                Process proc = new Process();

                // Получаем ветку реестра акробата
                var adobe = Registry.LocalMachine.OpenSubKey("Software").OpenSubKey("Microsoft").OpenSubKey("Windows").OpenSubKey("CurrentVersion").OpenSubKey("App Paths").OpenSubKey("AcroRd32.exe");
                if (adobe != null)
                {
                    // Находим полный путь к акробату
                    var path = adobe.GetValue("");
                    if (!System.String.IsNullOrEmpty(path.ToString()))
                    {
                        proc.StartInfo.FileName = path.ToString();
                        proc.StartInfo.Arguments = " /p " + targetFileName;
                        proc.StartInfo.UseShellExecute = false;
                        proc.StartInfo.CreateNoWindow = true;
                        proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

                        proc.Start();
                        proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

                    }
                    else
                    {
                        crystalReportViewer1.PrintReport();
                    }
                }
                else
                {
                    crystalReportViewerCold.Refresh();
                    crystalReportViewerCold.PrintReport();  // непосредственно вывод на печать. Скорее всего ошибка здесь
                }
                */

                    #endregion

                    #region Вариант 2

                    // выполняем экспорт в pdf файл
                    // --- 17.04.2013 ---
                    //string targetFileName = GetFilePathForPdfReport(); //System.Windows.Forms.Application.StartupPath + "\\" + strPdfFile; //GetFilePathForApplicationReport(strPdfFile);
                    //if (!System.String.IsNullOrEmpty(targetFileName))
                    //{
                    //    reportDocument.ExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
                    //    reportDocument.ExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;

                    //    DiskFileDestinationOptions diskOpts = new DiskFileDestinationOptions();
                    //    diskOpts.DiskFileName = targetFileName;
                    //    reportDocument.ExportOptions.DestinationOptions = diskOpts;

                    //    // Export report
                    //    reportDocument.Export();
                    //    // Открываем pdf файл
                    //    //System.Diagnostics.Process.Start(targetFileName);

                    //    Process p = new Process();
                    //    p.StartInfo = new ProcessStartInfo()
                    //    {
                    //        /*CreateNoWindow = false,*/
                    //        //Verb = "Printto",
                    //        FileName = targetFileName//,
                    //        //CreateNoWindow = false
                    //    };
                    //    p.Start();  // Открываем pdf файл

                    //    //p.WaitForInputIdle();
                    //    //p.Kill();

                    //}
                    //else
                    //{
                    //    // если строка к pdf файлу пернулась в виде "", пробуем выполнить печать из компонента
                    //    crystalReportViewerCold.Refresh();
                    //    crystalReportViewerCold.PrintReport();  // непосредственно вывод на печать. Скорее всего ошибка здесь
                    //}
                    //crystalReportViewerCold.Refresh();
                    //crystalReportViewerCold.PrintReport();

                    #endregion

                }
                else
                {
                    // если строка к pdf файлу пернулась в виде "", пробуем выполнить печать из компонента
                    //crystalReportViewer1.PrintReport(); // непосредственно вывод на печать. Скорее всего ошибка здесь
                    crystalReportViewerCold.PrintReport();
                }
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message, "Supervisor_ShowReportCold", MessageBoxButtons.OK, MessageBoxIcon.Error);                
            }
           
        }

        private string GetFilePathForApplicationReport(string strReportName)
        {
            try
            {
                DirectoryInfo d; 
                string directory = System.Windows.Forms.Application.StartupPath;
                d = new DirectoryInfo(directory);
                directory = d.Parent.Parent.FullName; // Parent перемещает на уровень вверх // временно 17.04
                directory = Path.Combine(directory, "Report", strReportName); // путь для отладки
                if (System.IO.File.Exists(directory))
                {
                    return directory;
                }
                else
                {
                    directory = System.Windows.Forms.Application.StartupPath;
                    // путь для рабочего вариант приложения. В одном каталоге с exe файлом должен находиться каталог Report с отчётом 'Заявка.rpt'
                    directory = Path.Combine(directory, "Report", strReportName);

                    if (System.IO.File.Exists(directory))
                    {
                        return directory;
                    }
                }
                return directory = "";
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message, "Supervisor_GetFilePathForApplicationReport", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return null;
            } 
        }

        private string GetFilePathForPdfReport()
        {
            try
            {
                DirectoryInfo d;
                string directory = System.Windows.Forms.Application.StartupPath;
                d = new DirectoryInfo(directory);
               
                directory = d.Parent.Parent.FullName; // Parent перемещает на уровень вверх 
                directory = Path.Combine(directory, "pdf"); // путь для отладки

                if (System.IO.Directory.Exists(directory)) 
                {
                    //return directory;
                    return directory = Path.Combine(directory, System.Guid.NewGuid().ToString()+".pdf" ); 
                }
                else
                {
                    directory = System.Windows.Forms.Application.StartupPath;
                    // путь для рабочего вариант приложения. В одном каталоге с exe файлом должен находиться каталог Report с отчётом 'Заявка.rpt'
                    directory = Path.Combine(directory, "pdf");
                    if (System.IO.Directory.Exists(directory))
                    {
                        //return directory;
                        return directory = Path.Combine(directory, System.Guid.NewGuid().ToString() + ".pdf"); 
                    }
                }
                return directory= "";
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message, "Supervisor_GetFilePathForPdfReport", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return null;
            }
        }

        /// <summary>
        /// Получть строку подключения для репорта
        /// </summary>
        /// <returns>стока подключения типа ConnectionInfo</returns>
        private ConnectionInfo GetConnectionParametrForReport()
        {
            ConnectionInfo con = new ConnectionInfo();
            try
            {
                SqlConnectionStringBuilder builder =
                    new System.Data.SqlClient.SqlConnectionStringBuilder(GetConnectionString());

                con.ServerName = builder.DataSource;
                con.DatabaseName = builder.InitialCatalog;
                con.UserID = builder.UserID;
                con.Password = builder.Password;

                return con;
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message, "Supervisor_GetConnectionParametrForReport", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return null;
            }
           
        }

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                DirectoryInfo d;
                string directory = System.Windows.Forms.Application.StartupPath;
                d = new DirectoryInfo(directory);
                directory = d.Parent.Parent.FullName; // Parent перемещает на уровень вверх
                directory = Path.Combine(directory, "Report", "Заявка.rpt");

                //directory += "Report\\" + "Заявка.rpt";
                //directory += "\\" + ".." + "\\" + ".." + "\\" + "Report\\" + "Заявка.rpt"; // путь для отладки
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message, "Supervisor_button2_Click", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
         }

        private void button3_Click(object sender, EventArgs e)
        {
            //ReportDocument reportDocument = new ReportDocument();
            //reportDocument.Load(GetFilePathForApplicationReport());
            //crystalReportViewer1.ReportSource = reportDocument;
            //DataSet ds = MyQueryMethod("_Supervisor_GetApplicationList", 104846);
            //reportDocument.SetDataSource(ds);
        }

        DataSet MyQueryMethod(string sqlQueryString, int iIdk)
        {
            DataSet ds = new DataSet();
            string sqlCon = "User ID=sa;PWD=m6yws72b; server=Rom;INITIAL CATALOG=Farmin2008;";
            System.Data.SqlClient.SqlConnection sqlConnection = new System.Data.SqlClient.SqlConnection(sqlCon);

            System.Data.SqlClient.SqlDataAdapter dataAdapter = new System.Data.SqlClient.SqlDataAdapter();

            System.Data.SqlClient.SqlCommand select = new System.Data.SqlClient.SqlCommand(sqlQueryString);

            select.CommandType = CommandType.StoredProcedure;

            select.Connection = sqlConnection;

            select.Parameters.Add("@Application_K", SqlDbType.Int).Value = iIdk;

            dataAdapter.SelectCommand = select;

            dataAdapter.Fill(ds);

            return ds;
        }

        private void СтрокаВводаTextBox_TextChanged(object sender, EventArgs e)
        {
            try
            {
                СтрокаВводаTimer.Stop();
                СтрокаВводаTimer.Start();
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message, "Supervisor_СтрокаВводаTextBox_TextChanged", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void ВремяTimer_Tick(object sender, EventArgs e)
        {
            try
            {
                int iUnallocatedId = Convert.ToInt32(ConfigurationManager.AppSettings["UnallocatedId"]);
                int? iCountUnallocated = 0;

                DateTime Время = DB._Supervisor_ПолучитьВремя().First().Время.Value;
                Text = "Supervisor [" + (Время.Hour / 10) + "" + (Время.Hour % 10) + ":" + (Время.Minute / 10) + "" + (Время.Minute % 10) + "]";

                int iКоличествоЗаявокДляСборки = DB._Supervisor_ПолучитьКоличествоЗаявокДляСборки().First().КоличествоЗаявокДляСборки.Value;
                //DB._Supervisor_GetUnallocatedCountApplication(iUnallocatedId, ref iCountUnallocated); // для варианта с нераспределенными заявками нужно использовать этот вариант
                 
                ЗаявокLabel.Text = "Заявок: " + iКоличествоЗаявокДляСборки;
                lblNeraspApplication.Text = "Нераспределенных заявок: " + iCountUnallocated;
                if ((iПредыдущееКоличествоЗаявокДляСборки == 0) && (iКоличествоЗаявокДляСборки > 0))
                {
                    try
                    {
                        ЕстьЗаявка.Play();
                    }
                    catch (Exception) { }
                }
                iПредыдущееКоличествоЗаявокДляСборки = iКоличествоЗаявокДляСборки;
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message, "Supervisor_ВремяTimer_Tick", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        /// <summary>
        /// Перключаемя на таб с заданиями
        /// </summary>
        private void SetTabSupervisor()
        {
            try
            {
                if (tabControl1.SelectedTab.Name == "tabReport")
                {
                    tabControl1.SelectedIndex = 0;
                    //tabControl1.TabPages["tabSupervisor"].Select();
                }
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message, "Supervisor_SetTabSupervisor", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void СтрокаВводаTimer_Tick(object sender, EventArgs e)
        {
            try
            {
                СтрокаВводаTimer.Stop();
                
                SetTabSupervisor();

                if (СтрокаВводаTextBox.Text.Trim().Length == 8) // Код работника
                {

                    //_Supervisor_ПолучитьРаботникаИЕгоТекущееЗаданиеResult Line = DB._Supervisor_GetEmployeAndCurrentJob(СтрокаВводаTextBox.Text.Trim()).First(); // для варианта с неперенесенными заявками
                    _Supervisor_ПолучитьРаботникаИЕгоТекущееЗаданиеResult Line = DB._Supervisor_ПолучитьРаботникаИЕгоТекущееЗадание(СтрокаВводаTextBox.Text.Trim()).First();
                    if (Line.Работник_K.Value >= 0)
                    {
                        СтрокаВводаTextBox.Text = "";

                        lРаботник_K = Line.Работник_K.Value;
                        sРаботник = Line.Работник;

                        if (Line.Задание_K.Value < 0)
                        {
                            ЗаданияContextMenuStrip.Items.Clear();
                            ISingleResult<_Supervisor_ПолучитьТипыЗаданийResult> Lines2 = DB._Supervisor_ПолучитьТипыЗаданий();
                            foreach (_Supervisor_ПолучитьТипыЗаданийResult Line2 in Lines2) ЗаданияContextMenuStrip.Items.Insert(0, new ToolStripMenuItem(Line2.ТипЗадания));
                            ЗаданияContextMenuStrip.Items.Add(new ToolStripMenuItem("Прочее"));
                            foreach (ToolStripItem Item in ЗаданияContextMenuStrip.Items) Item.Click += new System.EventHandler(ЗаданияContextMenuStrip_Click);

                            ЗаданияContextMenuStrip.Show((Screen.PrimaryScreen.WorkingArea.Width - ЗаданияContextMenuStrip.Width) >> 1, (Screen.PrimaryScreen.WorkingArea.Height - ЗаданияContextMenuStrip.Height) >> 1);
                        }
                        else
                        {
                            ЗаданиеForm Задание = new ЗаданиеForm("Закончить выполнение задания", Line.Работник, Line.ТипЗадания, Line.Примечание, false);
                            if (Задание.ShowDialog() == DialogResult.OK)
                            {
                                DB._Supervisor_ОтметитьОкончаниеВыполненияЗадания(Line.Задание_K.Value);
                                ОтобразитьАктивныеЗадания();
                            }
                            Задание.Dispose();
                        }
                    }
                }
                else if (СтрокаВводаTextBox.Text.Trim().Length == 13) // Код листа заявки
                {
                    _Supervisor_ПолучитьЛистЗаявкиResult Line = DB._Supervisor_ПолучитьЛистЗаявки(СтрокаВводаTextBox.Text.Trim()).First();
                    if (Line.ЛистЗаявки_K.Value > 0)
                    {
                        lЛистЗаявки_K = Line.ЛистЗаявки_K.Value;

                        ОперацииСЗаявкойContextMenuStrip.Show((Screen.PrimaryScreen.WorkingArea.Width - ОперацииСЗаявкойContextMenuStrip.Width) >> 1, (Screen.PrimaryScreen.WorkingArea.Height - ОперацииСЗаявкойContextMenuStrip.Height) >> 1);
                    }
                }
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message, "Supervisor_СтрокаВводаTimer_Tick", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void АктивныеЗаданияTimer_Tick(object sender, EventArgs e)
        {
            try
            {
                ОтобразитьАктивныеЗадания();
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message, "Supervisor_АктивныеЗаданияTimer_Tick", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void ДобавитьПомощникаToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                АвторизацияForm Авторизация = new АвторизацияForm("Добавить помощника", DB);
                if (Авторизация.ShowDialog() == DialogResult.OK)
                {
                    DB._Supervisor_ДобавитьПомощникаВСборкеЗаявки(lЛистЗаявки_K, Авторизация.lРаботник_K);

                    ОтобразитьАктивныеЗадания();
                }
                Авторизация.Dispose();
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message, "Supervisor_ДобавитьПомощникаToolStripMenuItem_Click", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }


        private void ОтобразитьАктивныеЗадания()
        {
            try
            {
                АктивныеЗаданияTimer.Stop();
                АктивныеЗаданияTimer.Start();

                АктивныеЗаданияListView.Items.Clear();

                ISingleResult<_Supervisor_ПолучитьАктивныеЗаданияResult> Lines = DB._Supervisor_ПолучитьАктивныеЗадания();
                string[] sLine = new string[5];
                foreach (_Supervisor_ПолучитьАктивныеЗаданияResult Line in Lines)
                {
                    sLine[0] = " " + Line.Задание_K.Value;
                    sLine[1] = Line.Работник;
                    sLine[2] = Line.ТипЗадания;
                    sLine[3] = Line.Примечание;
                    DateTime Начало = Line.Начало.Value;
                    sLine[4] = (Начало.Hour / 10) + "" + (Начало.Hour % 10) + ":" + (Начало.Minute / 10) + "" + (Начало.Minute % 10);
                    if ((Начало.Day != DateTime.Now.Day) || (Начало.Month != DateTime.Now.Month) || (Начало.Year != DateTime.Now.Year)) sLine[4] = (Начало.Day / 10) + "" + (Начало.Day % 10) + "." + (Начало.Month / 10) + "" + (Начало.Month % 10) + "." + (Начало.Year / 1000) + "" + ((Начало.Year % 1000) / 100) + "" + ((Начало.Year % 100) / 10) + "" + (Начало.Year % 10) + " " + sLine[4];

                    АктивныеЗаданияListView.Items.Add(new ListViewItem(sLine));
                }
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message, "Supervisor_ОтобразитьАктивныеЗадания", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }


        //private void ЗаданияContextMenuStrip_Click(object sender, EventArgs e)
        //{
        //    try
        //    {
        //        int k = 0;
        //        int? id_k=0;

        //        ЗаданиеForm Задание = new ЗаданиеForm("Начать выполнение задания", sРаботник, sender.ToString(), "", sender.ToString().Equals("Прочее"));
        //        if (Задание.ShowDialog() == DialogResult.OK)
        //        {
        //            if (sender.ToString().Equals("Сборка товара") == true)
        //            {
        //                #region Ориганальный вариант
        //                // 1
        //                //  ориганальный вариант 
        //                //_Supervisor_ПолучитьЗаявкуДляСборкиResult Line = DB._Supervisor_ПолучитьЗаявкуДляСборки().First(); // ориганальный вариант // за счёт First отбираем первую свободную заявку
        //                #endregion
                        
        //                // здесь написать метод, который проверит, есть ли заявки, которые нераспределены и вернуть её K_id
        //                // и добавть задание на нераспределённую заявку

        //                int UnallocatedId=Convert.ToInt32(ConfigurationManager.AppSettings["UnallocatedId"]);
                        
        //                int iSheetNumBreak=Convert.ToInt32(ConfigurationManager.AppSettings["SheetNumBreak"]);
        //                int iQuantityGoods = Convert.ToInt32(ConfigurationManager.AppSettings["QuantityGoods"]);

        //                DB._Supervisor_GetUnallocatedApplication(UnallocatedId, ref id_k); // получаем одну из нераспределённых заявок

        //                if (id_k != 0) // есть нераспределенные заявки
        //                {
        //                    //Метод _Supervisor_ПолучитьЗаявкуДляСборки() получает нераспределённые заявки, если они есть
        //                    ISingleResult<_Supervisor_ПолучитьЗаявкуДляСборкиResult> ApplicationToBuildNerasp = DB._Supervisor_GetApplicationToBuild(UnallocatedId, iSheetNumBreak, iQuantityGoods);  // получаем лист заявок (если есть, то нераспределённых). 
        //                    foreach (_Supervisor_ПолучитьЗаявкуДляСборкиResult Line in ApplicationToBuildNerasp)
        //                    {
        //                        DB._Supervisor_AddJob(lРаботник_K, sender.ToString(), "Заявка " + Line.Контрагент + " №" + Line.Номер + " от " + Line.Дата.ToString() + " на " + ((int)Line.Сумма).ToString() + " руб.", Line.Заявка_K.Value, 1); // добавляем задание                                
                               
        //                        ShowReportBuilApplication(Convert.ToInt32(Line.Заявка_K.Value));
        //                        //ShowReportCold();
                                
        //                    }
        //                }
        //                else // если нерспределённых заявок нет
        //                {
        //                    ISingleResult<_Supervisor_ПолучитьЗаявкуДляСборкиResult> ApplicationToBuild = DB._Supervisor_GetApplicationToBuild(UnallocatedId, iSheetNumBreak, iQuantityGoods); // получаем лист заявок
        //                    foreach (_Supervisor_ПолучитьЗаявкуДляСборкиResult Line in ApplicationToBuild) 
        //                    {
        //                        if (k != 0)
        //                        {
        //                            lРаботник_K = UnallocatedId; // для нераспределённых заданий lРаботник_K == 70
        //                        }

        //                        // т.е. первое задание (после разбики на 50 (сейчас 20) позиций, их скорее всего будет несколько) закрепляется за текущим работкиком, а остальные сохраняются как нераспределённые (lРаботник_K=70)
        //                        DB._Supervisor_AddJob(lРаботник_K, sender.ToString(), "Заявка " + Line.Контрагент + " №" + Line.Номер + " от " + Line.Дата.ToString() + " на " + ((int)Line.Сумма).ToString() + " руб.", Line.Заявка_K.Value,0); // добавляем задание


        //                        if (k == 0)
        //                        {
        //                            // Отчёт с первыми 50 (сейчас 20) позициями показываем (выводим на принтер)   
                                                                        
        //                            ShowReportBuilApplication(Convert.ToInt32(Line.Заявка_K));
        //                            //ShowReportCold();
        //                        }
        //                        k++;
        //                    }
        //                }

        //                #region Ориганальный вариант
        //                // где-то здесь написать процедуру, которая проверит кол-во заявок
        //                // см. _Supervisor_ПолучитьЗаявкуДляСборки()

        //                // 2
        //                //var t= DB._Supervisor_ДобавитьЗадание(lРаботник_K, sender.ToString(), "Заявка " + Line.Контрагент + " №" + Line.Номер + " от " + Line.Дата.ToString() + " на " + ((int)Line.Сумма).ToString() + " руб.", Line.Заявка_K.Value); // !!!
        //                //{
        //                //    ConnectionInfo ConnectionInfo = new ConnectionInfo();
        //                //    //ConnectionInfo.ServerName = "10.0.1.12";
        //                //    ConnectionInfo.ServerName = ".";
        //                //    //ConnectionInfo.DatabaseName = "Farmin2008";
        //                //    ConnectionInfo.DatabaseName = "Farmin2008";
        //                //    //ConnectionInfo.UserID = "Admin";
        //                //    ConnectionInfo.UserID = "sa";
        //                //    //ConnectionInfo.Password = "zx";
        //                //    ConnectionInfo.Password = "m6yws72b";
        //                //    ReportDocument ReportDocument = new ReportDocument();
        //                //    //ReportDocument.Load("C:\\Program Files\\Заявка.rpt");
        //                //    ReportDocument.Load("D:\\Project\\Supervisor\\Заявка.rpt");
        //                //    TableLogOnInfo TableLogOnInfo;
        //                //    foreach (Table Table in ReportDocument.Database.Tables)
        //                //    {
        //                //        TableLogOnInfo = Table.LogOnInfo;
        //                //        TableLogOnInfo.ConnectionInfo = ConnectionInfo;
        //                //        Table.ApplyLogOnInfo(TableLogOnInfo);
        //                //    }
        //                //    ЗаявкаCrystalReportViewer.ReportSource = ReportDocument;
        //                //    ЗаявкаCrystalReportViewer.PrintReport();
        //                //}
        //                //{
        //                //    ConnectionInfo ConnectionInfo = new ConnectionInfo();
        //                //    //ConnectionInfo.ServerName = "10.0.1.12";
        //                //    ConnectionInfo.ServerName = ".";
        //                //    //ConnectionInfo.DatabaseName = "Farmin2008";
        //                //    ConnectionInfo.DatabaseName = "Farmin2008";
        //                //    //ConnectionInfo.UserID = "Admin";
        //                //    //ConnectionInfo.Password = "zx";
        //                //    ConnectionInfo.UserID = "sa";
        //                //    ConnectionInfo.Password = "m6yws72b";
        //                //    ReportDocument ReportDocument = new ReportDocument();
        //                //    //ReportDocument.Load("C:\\Program Files\\Карта.rpt");
        //                //    ReportDocument.Load("D:\\Project\\Supervisor\\Карта.rpt");
        //                //    TableLogOnInfo TableLogOnInfo;
        //                //    foreach (Table Table in ReportDocument.Database.Tables)
        //                //    {
        //                //        TableLogOnInfo = Table.LogOnInfo;
        //                //        TableLogOnInfo.ConnectionInfo = ConnectionInfo;
        //                //        Table.ApplyLogOnInfo(TableLogOnInfo);
        //                //    }
        //                //    ЗаявкаCrystalReportViewer.ReportSource = ReportDocument;
        //                //    ЗаявкаCrystalReportViewer.PrintReport();
        //                //}
        //                #endregion 

        //            }
        //            else DB._Supervisor_AddJob(lРаботник_K, sender.ToString(), Задание.sПримечание, -1,0);

        //            ОтобразитьАктивныеЗадания();
        //        }
        //        Задание.Dispose(); 
        //    }
        //    catch (Exception Ex)
        //    {
        //        MessageBox.Show(Ex.Message, "Supervisor_ЗаданияContextMenuStrip_Click", MessageBoxButtons.OK, MessageBoxIcon.Error);
        //    }
        //}

        private void ЗаданияContextMenuStrip_Click(object sender, EventArgs e)
        {
            try
            {
                ЗаданиеForm Задание = new ЗаданиеForm("Начать выполнение задания", sРаботник, sender.ToString(), "",
                                                      sender.ToString().Equals("Прочее"));
                if (Задание.ShowDialog() == DialogResult.OK)
                {
                    if (sender.ToString().Equals("Сборка товара") == true)
                    {
                        _Supervisor_ПолучитьЗаявкуДляСборкиResult Line =
                            DB._Supervisor_ПолучитьЗаявкуДляСборки().First();
                        DB._Supervisor_ДобавитьЗадание_ser(lРаботник_K, sender.ToString(),
                                                           "Заявка " + Line.Контрагент + " №" + Line.Номер + " от " +
                                                           Line.Дата.ToString() + " на " + ((int) Line.Сумма).ToString() +
                                                           " руб.", Line.Заявка_K.Value);
                        {
                            ConnectionInfo ConnectionInfo = new ConnectionInfo();

                            ConnectionInfo = GetConnectionParametrForReport();

                            ReportDocument ReportDoc = new ReportDocument();
                            //ReportDocument.Load("C:\\Program Files\\Заявка.rpt");
                            ReportDoc.Load(GetFilePathForApplicationReport(@"Zajavka_ser.rpt"));
                            //ReportDocument.Load(GetFilePathForApplicationReport(@"Заявка.rpt"));
                            TableLogOnInfo TableLogOnInfo;
                            foreach (Table Table in ReportDoc.Database.Tables)
                            {
                                TableLogOnInfo = Table.LogOnInfo;
                                TableLogOnInfo.ConnectionInfo = ConnectionInfo;
                                Table.ApplyLogOnInfo(TableLogOnInfo);
                            }

                            //crystalReportViewer1.ReportSource = ReportDoc;
                            //crystalReportViewer1.PrintReport(); // печатаем заявку


                            int iShowPrintDialog = Convert.ToInt32(ConfigurationManager.AppSettings["ShowPrintDailog"]);
                            if (iShowPrintDialog == 1)
                            {
                                crystalReportViewer1.ReportSource = ReportDoc;
                                crystalReportViewer1.PrintReport(); // печатаем заявку через показ диалога печати
                            }
                            else
                            {
                                PrinterSettings settings = new PrinterSettings();
                                if (!System.String.IsNullOrEmpty(settings.PrinterName))
                                {
                                    crystalReportViewer1.ReportSource = ReportDoc;
                                    ReportDoc.PrintOptions.PrinterName = settings.PrinterName; // печатаем заявку на принтер по умолчанию
                                    ReportDoc.PrintToPrinter(1, false, 0, 0); //copies, collated, startpage, endpage
                                }
                            }

                            // выполняем экспорт в pdf файл
                            // --- 17.04.2013 ---
                            string targetFileName = GetFilePathForPdfReport();
                                //System.Windows.Forms.Application.StartupPath + "\\" + strPdfFile; //GetFilePathForApplicationReport(strPdfFile);
                            if (!System.String.IsNullOrEmpty(targetFileName))
                            {
                                ReportDoc.ExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
                                ReportDoc.ExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;

                                DiskFileDestinationOptions diskOpts = new DiskFileDestinationOptions();
                                diskOpts.DiskFileName = targetFileName;
                                ReportDoc.ExportOptions.DestinationOptions = diskOpts;

                                // Export report
                                ReportDoc.Export();
                            }


                            //ЗаявкаCrystalReportViewer.ReportSource = ReportDocument;
                            //ЗаявкаCrystalReportViewer.PrintReport();
                        }


                        //{
                        //    ConnectionInfo ConnectionInfo = new ConnectionInfo();
                        //    //ConnectionInfo.ServerName = "10.0.1.12";

                        //    //ConnectionInfo.ServerName = "10.0.5.12";
                        //    ConnectionInfo.ServerName = ".";
                        //    ConnectionInfo.DatabaseName = "Farmin2008_121024"; //"Farmin2008_last";
                        //    ConnectionInfo.UserID = "sa";
                        //    ConnectionInfo.Password = "m6yws72b";
                        //    ReportDocument ReportDocument = new ReportDocument();
                        //    ReportDocument.Load("C:\\Program Files\\Карта.rpt");
                        //    TableLogOnInfo TableLogOnInfo;
                        //    foreach (Table Table in ReportDocument.Database.Tables)
                        //    {
                        //        TableLogOnInfo = Table.LogOnInfo;
                        //        TableLogOnInfo.ConnectionInfo = ConnectionInfo;
                        //        Table.ApplyLogOnInfo(TableLogOnInfo);
                        //    }
                        //    ЗаявкаCrystalReportViewer.ReportSource = ReportDocument;
                        //    ЗаявкаCrystalReportViewer.PrintReport();
                        //}
                    }
                    else DB._Supervisor_ДобавитьЗадание_ser(lРаботник_K, sender.ToString(), Задание.sПримечание, -1);

                    ОтобразитьАктивныеЗадания();
                }
                Задание.Dispose();
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message, "Supervisor", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                СтрокаВводаTextBox.Focus();
            }
        }



        private void АктивныеЗаданияListView_Resize(object sender, EventArgs e)
        {
            try
            {
                int iБазоваяШирина = (АктивныеЗаданияListView.Width - 28) / 13;
                АктивныеЗаданияListView_K.Width = 0;
                АктивныеЗаданияListView_Работник.Width = iБазоваяШирина * 3;
                АктивныеЗаданияListView_Задание.Width = iБазоваяШирина * 2;
                АктивныеЗаданияListView_Примечание.Width = iБазоваяШирина * 7;
                АктивныеЗаданияListView_Начало.Width = АктивныеЗаданияListView.Width - 28 - iБазоваяШирина * 12;
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message, "Supervisor_АктивныеЗаданияListView_Resize", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void ПередатьДругомуРаботникуToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                АвторизацияForm Авторизация = new АвторизацияForm("Передать другому работнику", DB);
                if (Авторизация.ShowDialog() == DialogResult.OK)
                {
                    DB._Supervisor_ПередатьЗаявкуИлиЛистЗаявкиДругомуРаботнику(lЛистЗаявки_K, Авторизация.lРаботник_K);

                    ОтобразитьАктивныеЗадания();
                }
                Авторизация.Dispose();
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message, "Supervisor_ПередатьДругомуРаботникуToolStripMenuItem_Click", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }







    }
}
